/*
 * Projeto Destinado a Prefeitura de Goiânia.
 * Projeto de Modernização do Arquitetura de Desenvolvimento de Software.
 * Todos os Direitos Reservados.
 */
package br.com.prefeitura.goiania.orcamento.entidade;

import org.hibernate.validator.constraints.NotEmpty;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.validation.constraints.Size;

/**
 *
 * @author Germinado
 */
@Entity
@Table(name = "usuario")
@NamedQueries({
    @NamedQuery(name = "Usuario.listarTodos"          , query = "SELECT u FROM Usuario u"),
    @NamedQuery(name = "Usuario.obterPorId"           , query = "SELECT u FROM Usuario u WHERE u.id = :id"),
    @NamedQuery(name = "Usuario.listarPorNome"        , query = "SELECT u FROM Usuario u WHERE u.nome = :nome"),
    @NamedQuery(name = "Usuario.obterPorMatricula"    , query = "SELECT u FROM Usuario u WHERE u.matricula = :matricula"), //TODO: E lista ou unico?
    @NamedQuery(name = "Usuario.listarAdminstradores" , query = "SELECT u FROM Usuario u WHERE u.administrador = :administrador")})
public class Usuario extends Entidade<Integer> {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id_usuario")
    private Integer id;
    
    @Size(max = 2147483647) //TODO: Isso tudo mesmo?
    @Column(name = "nome")
    private String nome;

    @NotEmpty
    @Column(name = "matricula")
    private String matricula;  //TODO:mudei pra string verificar  Se esse for o login colocar algo aki pra ser Unico

    @NotEmpty
    @Size(max = 2147483647) //TODO: Isso tudo pra senha???
    @Column(name = "senha")
    private String senha;
    
    @Column(name = "administrador")
    private Boolean administrador;
    
    public Integer getId() {
        return id;
    }

    public void setId(final Integer id) {
        this.id= id;
    }
    
    public String getNome() {
        return nome;
    }
    
    public void setNome(final String nome) {
        this.nome = nome;
    }
    
    public String getMatricula() {
        return matricula;
    }
    
    public void setMatricula(final String matricula) {
        this.matricula = matricula;
    }
    
    public String getSenha() {
        return senha;
    }
    
    public void setSenha(final String senha) {
        this.senha = senha;
    }

    public Boolean isAdministrador() {
        return administrador;
    }

    public void setAdministrador(final Boolean administrador) {
        this.administrador = administrador;
    }
    
    public boolean equals(final Object objeto) {
		boolean retorno = false;
		
		if(objeto != null && id != null && this.getClass().equals(objeto.getClass())){
			retorno = id.compareTo(((Usuario)objeto).getId()) == 0;
		}
		
		return retorno;
		
	}
    
}